package com.infore.qualityControl.select.util;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Sort;
import org.springframework.data.domain.Sort.Direction;

/**
 * 分页参数封装传递对象
 */
public class PageObject implements Serializable {
    private static final long serialVersionUID = -8753809986545361268L;
    /** 排序字段分隔符 */
    public static final String SORD_COLUMNS_SEPARATOR = ",";
    /** 当前页 */
    private Integer pageNumber;
    /** 每页最多能显示的记录数 */
    private Integer pageSize;
    /** 总记录数 */
    private Integer rowCount;
    /** 排序列 */
    String sordColumn;
    /** 排序顺序 */
    String order;
    /**
     * 上一页的最后一条记录位置 对应:limit startIndex,pageSize;
     */
    private int startIndex;

    public Integer getPageNumber() {
        return pageNumber;
    }

    public void setPageNumber(Integer pageNumber) {

        this.pageNumber = pageNumber;
    }

    public Integer getPageSize() {
        return pageSize;
    }

    public void setPageSize(Integer pageSize) {
        this.pageSize = pageSize;
    }

    public Integer getRowCount() {
        return rowCount;
    }

    public void setRowCount(Integer rowCount) {
        this.rowCount = rowCount;
    }

    // public Integer getPageCount() {
    // int pages = rowCount / pageSize;
    // if (0 != rowCount % pageSize) {
    // pages += 1;
    // }
    // return pages;
    // }

    public Integer getStartIndex() {
        return startIndex;
    }

    public void setStartIndex(Integer startIndex) {
        this.startIndex = startIndex;
    }

    public String getSordColumn() {
        return sordColumn;
    }

    public void setSordColumn(String sordColumn) {
        this.sordColumn = sordColumn;
    }

    public String getOrder() {
        return order;
    }

    public void setOrder(String order) {
        this.order = order;
    }

    /**
     * 获取排序字段数组
     * 
     * @author qiye
     * @date 2018年6月21日 上午11:47:57
     * @return
     */
    public List<String> getOrderProperties() {
        List<String> list = new ArrayList<String>();
        if (this.sordColumn != null && !"".equals(this.sordColumn)) {
            String[] columns = this.sordColumn.split(SORD_COLUMNS_SEPARATOR);
            for (String column : columns) {
                list.add(column);
            }
        }
        return list;
    }

    /**
     * 获得排序顺序对象
     * 
     * @author qiye
     * @date 2018年6月21日 下午1:48:21
     * @return
     */
    public Direction getDirection() {
        Direction direction = null;
        if (this.order != null && !"".equals(this.order)) {
            direction = Direction.fromString(order);
        }
        return direction;
    }

    /**
     * 获得排序对象
     * 
     * @author qiye
     * @date 2018年6月21日 下午1:49:39
     * @return
     */
    public Sort getSort() {
        Sort sort = null;
        Direction direction = getDirection();
        List<String> list = getOrderProperties();
        if (direction != null && list.size() > 0) { // 排序字段和顺序存在才创建排序
            sort = new Sort(direction, list);
        }
        return sort;
    }

    /**
     * 获得分页请求参数对象
     * 
     * @author qiye
     * @date 2018年6月21日 下午2:03:04
     * @return
     */
    public PageRequest getPageRequest() {
        PageRequest pageRequest = null;
        Sort sort = getSort();
        if (sort != null) {
            pageRequest = PageRequest.of(this.pageNumber - 1, this.pageSize, sort);
        } else {
            pageRequest = PageRequest.of(this.pageNumber - 1, this.pageSize);
        }
        return pageRequest;
    }
}
